#include<vector>
#include<functional>
using namespace std;
class Solution {
public:
    int rob(vector<int>& nums) {
        int size(nums.size());
        if(size==1) return nums[0];
        vector<int>dp(size,0);
        //如果是环的结点 就不满足可选路径条件
        //但动态规划的过程中不好判断可选路径是不是包括了头
        //使用不带环的偷两次 一次去头一次去尾 即可
        function<int(int,int)>rot_act([&](int start,int end)->int{
            int size=end-start;
            if(size==1) return nums[start];
            dp[0]=nums[start],dp[1]=nums[start+1];
            for(int i=2;i<size;i++){
                int max_from=0;
                for(int j=start+i-2;j>=start;j--){
                    max_from=max(max_from,dp[j-start]);
                }
                dp[i]=nums[start+i]+max_from;
            }
            return max(dp[size-1],dp[size-2]);
        });
        return max(rot_act(0,size-1),rot_act(1,size));
    }
};